// 引入 express 模块，用于创建 web 服务器
const express = require('express');
// 引入 sqlite3 模块，用于操作 SQLite 数据库
const sqlite3 = require('sqlite3').verbose();
// 引入 cors 模块，用于处理跨域请求
const cors = require('cors');
// 创建 express 应用实例
const app = express();
// 定义端口号
const port = 3000;

// 使用 express.json() 中间件，用于解析 JSON 格式的请求体
app.use(express.json());
// 使用 cors() 中间件，用于处理跨域请求
app.use(cors());

// 创建一个 SQLite 数据库连接，文件名为 students.db
const db = new sqlite3.Database('students.db');

// 定义一个 GET 请求路由，路径为 /students，用于获取所有学生信息
app.get('/students', (req, res) => {
    // 使用 db.all() 方法查询 students 表中的所有数据
    db.all("SELECT * FROM students", [], (err, rows) => {
        // 如果查询出错，返回 500 错误和错误信息
        if (err) {
            return res.status(500).json({ error: err.message });
        }
        // 如果查询成功，返回查询结果
        res.json(rows);
    });
});

// 定义一个 GET 请求路由，路径为 /students/:id，用于根据 id 获取单个学生信息
app.get('/students/:id', (req, res) => {
    // 使用 db.get() 方法查询 students 表中 id 为 req.params.id 的数据
    db.get("SELECT * FROM students WHERE id = ?", [req.params.id], (err, row) => {
        // 如果查询出错，返回 500 错误和错误信息
        if (err) {
            return res.status(500).json({ error: err.message });
        }
        // 如果查询结果为空，返回 404 错误和 "Student not found" 信息
        if (!row) {
            return res.status(404).json({ message: 'Student not found' });
        }
        // 如果查询成功，返回查询结果
        res.json(row);
    });
});

// 定义一个 POST 请求路由，路径为 /students，用于创建新的学生信息
app.post('/students', (req, res) => {
    // 从请求体中获取 name, age, grade 字段
    const { name, age, grade } = req.body;
    // 使用 db.run() 方法向 students 表中插入一条数据
    db.run("INSERT INTO students (name, age, grade) VALUES (?, ?, ?)", [name, age, grade], function (err) {
        // 如果插入出错，返回 500 错误和错误信息
        if (err) {
            return res.status(500).json({ error: err.message });
        }
        // 如果插入成功，返回 201 状态码和插入后的 id
        res.status(201).json({ id: this.lastID, message: 'Student created successfully' });
    });
});

// 定义一个 PUT 请求路由，路径为 /students/:id，用于更新指定 id 的学生信息
app.put('/students/:id', (req, res) => {
    const { name, age, grade } = req.body;
    const studentId = req.params.id;

    console.log("PUT request received for ID:", studentId);
    console.log("Request body:", req.body);

    db.run("UPDATE students SET name = ?, age = ?, grade = ? WHERE id = ?", [name, age, grade, studentId], function(err) {
        if (err) {
            console.error("Database error:", err.message);
            return res.status(500).json({ error: err.message });
        }
        console.log("Rows updated:", this.changes);
        if (this.changes === 0) {
            return res.status(404).json({ message: 'Student not found' });
        }
        res.json({ message: 'Student updated successfully' });
    });
});

// 定义一个 DELETE 请求路由，路径为 /students/:id，用于删除指定 id 的学生信息
app.delete('/students/:id', (req, res) => {
    // 使用 db.run() 方法删除 students 表中 id 为 req.params.id 的数据
    db.run("DELETE FROM students WHERE id = ?", [req.params.id], function (err) {
        // 如果删除出错，返回 500 错误和错误信息
        if (err) {
            return res.status(500).json({ error: err.message });
        }
        // 如果删除影响的行数为 0，说明没有找到该学生，返回 404 错误和 "Student not found" 信息
        if (this.changes === 0) {
            return res.status(404).json({ message: 'Student not found' });
        }
        // 如果删除成功，返回成功信息
        res.json({ message: 'Student deleted successfully' });
    });
});

// 监听指定端口，启动服务器
app.listen(port, () => {
    console.log(`Server is listening on port ${port}`);
});